858428fd14b5dd5e461b136a43dd0b9c7cdd4f8f,samigo/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/author/CalculatedQuestionExtractListener.java,CalculatedQuestionExtractListener,validateFormulas,#ItemBean#,270
Before Change
long dummyGradingId = 1;
String dummyAgentId = "dummy";
for (int attemptCnt = 0; attemptCnt < 100; attemptCnt++) {
// create random values for the variables to substitute into the formulas
Map<String, String> answersMap = service.determineRandomValuesForRanges(variableRangeMap, dummyItemId,
dummyGradingId, dummyAgentId, attemptCnt);
// evaluate each formula
for (CalculatedQuestionFormulaBean formulaBean : item.getCalculatedQuestion().getActiveFormulas().values()) {
String formulaStr = formulaBean.getText();
formulaBean.setValidated(true);
String substitutedFormulaStr = service.replaceMappedVariablesWithNumbers(formulaStr, answersMap);
// look for wrapped variables that haven't been replaced (undefined variable)
List<String> unwrappedVariables = service.extractVariables(substitutedFormulaStr);
if (unwrappedVariables.size() > 0) {
formulaBean.setValidated(false);
errors.put(9, "Wrapped variable not found");
} else {
try {
After Change
* value is the string result of that error message.
*/
private List<String> validateFormulas(ItemBean item, GradingService service) {
List<String> errors = new ArrayList<String>();
SamigoExpressionParser parser = new SamigoExpressionParser();
if (service == null) {
service = new GradingService();
}
// list of variables to substitute
Map<String, String> variableRangeMap = new HashMap<String, String>();
for (CalculatedQuestionVariableBean variable : item.getCalculatedQuestion().getActiveVariables().values()) {
String match = variable.getMin() + "|" + variable.getMax() + "," + variable.getDecimalPlaces();
variableRangeMap.put(variable.getName(), match);
}
// dummy variables needed to generate random values within ranges for the variables
long dummyItemId = 1;
long dummyGradingId = 1;
String dummyAgentId = "dummy";
int attemptCnt = 0;
while (attemptCnt < 100 && errors.size() == 0) {
// create random values for the variables to substitute into the formulas
Map<String, String> answersMap = service.determineRandomValuesForRanges(variableRangeMap, dummyItemId,
dummyGradingId, dummyAgentId, attemptCnt);
// evaluate each formula
for (CalculatedQuestionFormulaBean formulaBean : item.getCalculatedQuestion().getActiveFormulas().values()) {
String formulaStr = formulaBean.getText();
if (formulaStr == null || formulaStr.length() == 0) {
formulaBean.setValidFormula(false);
errors.add(getErrorMessage("empty_field"));
} else {
String substitutedFormulaStr = service.replaceMappedVariablesWithNumbers(formulaStr, answersMap);
// look for wrapped variables that haven't been replaced (undefined variable)
List<String> unwrappedVariables = service.extractVariables(substitutedFormulaStr);
if (unwrappedVariables.size() > 0) {
formulaBean.setValidFormula(false);
errors.add(getErrorMessage("samigo_formula_error_9"));
} else {
try {
if (isNegativeSqrt(substitutedFormulaStr, service)) {